package com.xbongbong.saas.model;

import com.xbongbong.paas.toolbox.exception.XbbException;
import com.xbongbong.paas.toolbox.wrap.IModel;
import com.xbongbong.saas.domain.entity.QuotationProductEntity;

import java.util.List;
import java.util.Map;

/**
 * @author long.rao
 * @version v1.0
 * @date 2019/8/16 10:18
 * @since v1.0
 */
public interface QuotationProductModel extends IModel<QuotationProductEntity> {

    /**
     * 数据插入
     * @param entity
     * @throws XbbException 异常
     * @return Integer
     * @author long.rao
     * @date 2019-08-16 10:19
     */
    @Override
    Integer insert(QuotationProductEntity entity) throws XbbException;
    /**
     * 数据更新
     * @param entity
     * @throws XbbException 异常
     * @return Integer
     * @author long.rao
     * @date 2019-08-16 10:19
     */
    @Override
    Integer update(QuotationProductEntity entity) throws XbbException;
    /**
     * 查询多个
     * @param param 参数
     * @return List<QuotationProductEntity>
     * @author long.rao
     * @date 2019-08-16 10:19
     */
    @Override
    List<QuotationProductEntity> findEntitys(Map<String, Object> param);
    /**
     * 多条查询
     * @param param 参数
     * @return java.lang.Integer
     * @author long.rao
     * @date 2019-08-16 10:19
     */
    @Override
    Integer getEntitysCount(Map<String, Object> param);
    /**
     * 单条查询
     * @param key 主键ID
     * @param corpid 公司ID
     * @return java.lang.Integer
     * @author long.rao
     * @date 2019-08-16 10:19
     */
    QuotationProductEntity getByKey(Long key, String corpid);

    /**
     * 报价单产品数据保存
     * @param entity 报价单产品实体
     * @throws XbbException 异常
     * @return Integer
     * @author long.rao
     * @date 2019-08-16 10:40
     */
    Integer save(QuotationProductEntity entity) throws XbbException;

    /**
     * 根据报价单id获取对应的类型的产品
     * @param quoId 报价单id
     * @param corpid 公司ID
     * @param delIn del
     * @author 吴峰
     * @date 2021/9/16 14:32
     */
    List<QuotationProductEntity> getProductsByQuoId(Long quoId, String corpid, List<Integer> delIn);
    
    /**
     * 根据报价单id获取对应的类型的产品
     * @param quoId 报价单id
     * @param corpid 公司ID
     * @author long.rao
     * @date 2019-08-26 15:29
     */
    List<QuotationProductEntity> getProductsByQuoId(Long quoId, String corpid);

    /**
     * 批量删除报价产品
     * @author long.rao
     * @date 2019-08-16 20:36
     * @param quotationIdIn  报价产品id
     * @param corpid 公司id
     * @return java.lang.Integer
     * @throws XbbException 业务异常
     */
    Integer deleteQuotationAllProduct(List<Long> quotationIdIn, String corpid);

    /**
     * 获取产品根据报价单id
     * @param corpid 公司id
     * @param quotationIdIn 报价单id
     * @return 数据
     */
    List<QuotationProductEntity> getQuotationProductByQuotationIdIn(String corpid, List<Long> quotationIdIn);

    Integer dataConsistencyUpdate(List<QuotationProductEntity> list, String corpid);

    Long isProductSubAttrExist(String attr, String corpid, Integer isArray);

    Double summaryByAttr(String field, String corpid, Long refId, List<Long> productIdIn);

    Long countProductSub(String attr, String corpid, Integer isArray);

    List<QuotationProductEntity> getProductWithSubData(String attr, String corpid, Integer isArray, Long idGte, Integer limit);
    /**
     * 批量删除
     * @param deleteList
     * @param corpid
     * @return
     */
    Integer deleteBatch(List<Long> deleteList, String corpid, Integer del);
    /**
     * 批量编辑
     * @param list
     * @param corpid
     * @return
     */
    Integer updateBatch(List<QuotationProductEntity> list, String corpid);

    Integer insertBatch(List<QuotationProductEntity> insertList) throws XbbException;
}
